/**
 *  ValidationAgent.java        22-ott-2009
 *   
 * Copyright (c) 2009 mentalsmash.org
 *  
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 * 
 *  http://www.apache.org/licenses/LICENSE-2.0
 * 
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 * 
 *  The use of the Apache License does not indicate that this project is
 *  affiliated with the Apache Software Foundation.
 */

package org.mentalsmash.tazio.transactions.control;

/**
 * The <tt>ValidationAgent<tt> interface defines the methods that allow a
 * transaction to pass a <i>validation</i> stage.
 * Depending on the context and the implementation of <tt>ValidationAgent</tt>
 * different validation policies may be applied
 */
public interface ValidationAgent {
    /**
     * Validate a transaction against concurrent transactions that may be acting
     * on the same set of objects.
     * <p>
     * Depending on the status of the transaction the validation procedure may
     * differ
     * </p>
     * 
     * @param tx
     *            The transaction to be validated
     * @return
     */
    boolean validate(TazioTransaction tx);

}
